﻿namespace DoNet.TenPay
{
    /// <summary>
    /// 订单查询返回结果
    /// </summary>
    public interface IOrderQueryResultBase
    {
        /// <summary>
        /// 返回状态码
        /// SUCCESS/FAIL 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
        /// </summary>
        string return_code { set; get; }
        /// <summary>
        /// 返回信息
        /// 返回信息，如非空，为错误原因 签名失败 参数格式校验错误
        /// </summary>
        string return_msg { set; get; }
        /// <summary>
        /// 设备号 
        /// 调用接口提交的终端设备号
        /// 微信支付分配的终端设备号
        /// </summary>
        string device_info { set; get; }
        /// <summary>
        /// 随机字符串
        /// 微信返回的随机字符串
        /// </summary>
        string nonce_str { set; get; }
        /// <summary>
        /// 签名
        /// 微信返回的签名，详见签名生成算法
        /// </summary>
        string sign { set; get; }
        /// <summary>
        /// 业务结果
        /// SUCCESS/FAIL
        /// </summary>
        string result_code { set; get; }
        /// <summary>
        /// 错误代码
        /// 详细参见错误列表
        /// </summary>
        string err_code { set; get; }
        /// <summary>
        /// 错误代码描述
        /// 错误返回的信息描述
        /// </summary>
        string err_code_des { set; get; }
        /// <summary>
        /// 用户标识
        /// 用户在商户appid 下的唯一标识
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string openid { set; get; }
        /// <summary>
        /// 是否关注公众账号
        /// 用户是否关注公众账号，仅在公众账号类型支付有效，取值范围：Y或N;Y-关注;N-未关注
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string is_subscribe { set; get; }
        /// <summary>
        /// 付款银行
        /// 银行类型，采用字符串类型的银行标识，值列表详见银行类型
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string bank_type { set; get; }
        /// <summary>
        /// 标价币种
        /// 符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string fee_type { set; get; }
        /// <summary>
        /// 标价金额/订单金额
        /// 订单总金额，单位为分，只能为整数，详见支付金额
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        int total_fee { set; get; }
        /// <summary>
        /// 现金支付币种
        /// 符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string cash_fee_type { set; get; }
        /// <summary>
        /// 现金支付金额
        /// 订单现金支付金额，详见支付金额
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        int cash_fee { set; get; }
        /// <summary>
        /// 应结订单金额
        /// 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        int settlement_total_fee { set; get; }
        /// <summary>
        /// 代金券金额
        /// “代金券”金额<=订单金额，订单金额-“代金券”金额=现金支付金额，详见支付金额
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string coupon_fee { set; get; }
        /// <summary>
        /// 微信支付订单号
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string transaction_id { set; get; }
        /// <summary>
        /// 商户订单号
        /// 商户系统内部订单号，要求32个字符内（最少6个字符），只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string out_trade_no { set; get; }
        /// <summary>
        /// 商家数据包
        /// 商家数据包，原样返回
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        string attach { set; get; }
        /// <summary>
        /// 支付完成时间
        /// 商家数据包，原样返回
        /// 订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则
        /// </summary>
        string time_end { set; get; }

        /// <summary>
        /// 交易类型
        /// 支付类型为MICROPAY(即扫码支付)
        /// </summary>
        string trade_type { set; get; }
        /// <summary>
        /// 交易状态
        /// "SUCCESS--支付成功、REFUND--转入退款、NOTPAY--未支付、CLOSED--已关闭、REVOKED--已撤销(刷卡支付)、USERPAYING--用户支付中、PAYERROR--支付失败(其他原因，如银行返回失败)、ACCEPT--已接收，等待扣款"
        /// </summary>
        string trade_state { set; get; }
        /// <summary>
        /// 交易状态描述
        /// 对当前查询订单状态的描述和下一步操作的指引 例如：支付失败，请重新下单支付
        /// </summary>
        string trade_state_desc { set; get; }
        /// <summary>
        /// 商品详情 
        /*
        "商品详细列表，使用Json格式，传输签名前请务必使用CDATA标签将JSON文本串保护起来。如果使用了单品优惠，会有单品优惠信息返回
         discount_detail []：
        └ goods_id String 必填 32 商品的编号
        └ goods_name String 必填 256 商品名称
        └ coupon_batch_id String 必填 代金券批次ID
        └ coupon_id String 必填 代金卷ID
        └ coupon_fee int 必填 代金券支付金额，单位为分
        ""discount_detail"":[
        {
        ""goods_id"":""iphone6s_16G"",
        ""goods_name"":""iPhone6s 16G"",
        ""coupon_batch_id"":888,
        ""coupon_id"":666888,
        ""coupon_fee"":1000
        },
        {
        ""goods_id"":""iphone6s_32G"",
        ""goods_name"":""iPhone6s 32G"",
        ""coupon_batch_id"":999,
        ""coupon_id"":666999,
        ""coupon_fee"":1500
        }
        ]
        }"
        */
        /// </summary>
        string detail { set; get; }
    }
    /// <summary>
    /// 订单查询返回结果
    /// </summary>
    public class OrderQueryResultBase : ResponseReturnSuccess, IOrderQueryResultBase
    {
        /// <summary>
        /// 用户标识
        /// 用户在商户appid 下的唯一标识
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string openid { set; get; }
        /// <summary>
        /// 是否关注公众账号
        /// 用户是否关注公众账号，仅在公众账号类型支付有效，取值范围：Y或N;Y-关注;N-未关注
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string is_subscribe { set; get; }
        /// <summary>
        /// 付款银行
        /// 银行类型，采用字符串类型的银行标识，值列表详见银行类型
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string bank_type { set; get; }
        /// <summary>
        /// 标价币种
        /// 符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string fee_type { set; get; }
        /// <summary>
        /// 标价金额/订单金额
        /// 订单总金额，单位为分，只能为整数，详见支付金额
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public int total_fee { set; get; }
        /// <summary>
        /// 现金支付币种
        /// 符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string cash_fee_type { set; get; }
        /// <summary>
        /// 现金支付金额
        /// 订单现金支付金额，详见支付金额
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public int cash_fee { set; get; }
        /// <summary>
        /// 应结订单金额
        /// 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public int settlement_total_fee { set; get; }
        /// <summary>
        /// 代金券金额
        /// “代金券”金额<=订单金额，订单金额-“代金券”金额=现金支付金额，详见支付金额
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string coupon_fee { set; get; }
        /// <summary>
        /// 微信支付订单号
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string transaction_id { set; get; }
        /// <summary>
        /// 商户订单号
        /// 商户系统内部订单号，要求32个字符内（最少6个字符），只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string out_trade_no { set; get; }
        /// <summary>
        /// 商家数据包
        /// 商家数据包，原样返回
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string attach { set; get; }
        /// <summary>
        /// 支付完成时间
        /// 商家数据包，原样返回
        /// 订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则
        /// </summary>
        public string time_end { set; get; }

        /// <summary>
        /// 交易类型
        /// 支付类型为MICROPAY(即扫码支付)
        /// </summary>
        public string trade_type { set; get; }
        /// <summary>
        /// 交易状态
        /// "SUCCESS--支付成功、REFUND--转入退款、NOTPAY--未支付、CLOSED--已关闭、REVOKED--已撤销(刷卡支付)、USERPAYING--用户支付中、PAYERROR--支付失败(其他原因，如银行返回失败)、ACCEPT--已接收，等待扣款"
        /// </summary>
        public string trade_state { set; get; }
        /// <summary>
        /// 交易状态描述
        /// 对当前查询订单状态的描述和下一步操作的指引 例如：支付失败，请重新下单支付
        /// </summary>
        public string trade_state_desc { set; get; }
        /// <summary>
        /// 商品详情 
        /*
        "商品详细列表，使用Json格式，传输签名前请务必使用CDATA标签将JSON文本串保护起来。如果使用了单品优惠，会有单品优惠信息返回
         discount_detail []：
        └ goods_id String 必填 32 商品的编号
        └ goods_name String 必填 256 商品名称
        └ coupon_batch_id String 必填 代金券批次ID
        └ coupon_id String 必填 代金卷ID
        └ coupon_fee int 必填 代金券支付金额，单位为分
        ""discount_detail"":[
        {
        ""goods_id"":""iphone6s_16G"",
        ""goods_name"":""iPhone6s 16G"",
        ""coupon_batch_id"":888,
        ""coupon_id"":666888,
        ""coupon_fee"":1000
        },
        {
        ""goods_id"":""iphone6s_32G"",
        ""goods_name"":""iPhone6s 32G"",
        ""coupon_batch_id"":999,
        ""coupon_id"":666999,
        ""coupon_fee"":1500
        }
        ]
        }"
        */
        /// </summary>
        public string detail { set; get; }
    }
    /// <summary>
    /// 订单查询返回结果（商户）
    /// </summary>
    public class ResponseOrderQueryResult : OrderQueryResultBase
    {
        /*
        代金券ID	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	String(20)	代金券或立减优惠ID, $n为下标，从0开始编号
        代金券类型	coupon_type_$n	否	coupon_type_$n	否	coupon_type_$n	否	coupon_type_$n	否	coupon_type_$n	否	String	"CASH--充值代金券
        NO_CASH---非充值优惠券
        开通免充值券功能，并且订单使用了优惠券后有返回（取值：CASH、NO_CASH）。$n为下标,从0开始编号，举例：coupon_type_$0"
        单个代金券金额	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	int	单个代金券或立减优惠支付金额, $n为下标，从0开始编号
        
        */
    }
    /// <summary>
    /// 订单查询返回结果（供应商）
    /// </summary>
    public class ResponseOrderQueryResultSp : OrderQueryResultBase
    {
        /// <summary>
        /// 用户子标识
        /// 子商户appid下用户唯一标识，如需返回则请求时需要传sub_appid
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string sub_openid { set; get; }
        /// <summary>
        /// 是否关注子公众账号
        /// 用户是否关注子公众账号，仅在公众账号类型支付有效，取值范围：Y或N;Y-关注;N-未关注
        /// 支付类型为 MICROPAY 扫码支付 返回该字段
        /// </summary>
        public string sub_is_subscribe { set; get; }
        /*
        代金券ID	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	String(20)	代金券或立减优惠ID, $n为下标，从0开始编号
        代金券类型	coupon_type_$n	否	coupon_type_$n	否	coupon_type_$n	否	coupon_type_$n	否	coupon_type_$n	否	String	"CASH--充值代金券
        NO_CASH---非充值优惠券
        开通免充值券功能，并且订单使用了优惠券后有返回（取值：CASH、NO_CASH）。$n为下标,从0开始编号，举例：coupon_type_$0"
        单个代金券金额	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	int	单个代金券或立减优惠支付金额, $n为下标，从0开始编号
        
        */
    }
}
